{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# XGBoost Parameter Tuning for RentListingInquries Dataset"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 第五步：调整正则化参数：reg_alpha 和reg_lambda"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "首先 import 必要的模块"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from xgboost import XGBClassifier\n",
    "import xgboost as xgb\n",
    "\n",
    "import pandas as pd \n",
    "import numpy as np\n",
    "\n",
    "import math\n",
    "\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "from sklearn.model_selection import StratifiedKFold\n",
    "\n",
    "from sklearn.metrics import log_loss\n",
    "\n",
    "from matplotlib import pyplot\n",
    "import seaborn as sns\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 读取数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true,
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "# path to where the data lies\n",
    "#dpath = './data/'\n",
    "train = pd.read_csv(\"RentListingInquries_FE_train.csv\") \n",
    "#train.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Variable Identification"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "选择该数据集是因为的数据特征单一，我们可以在特征工程方面少做些工作，集中精力放在参数调优上"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "y_train = train['interest_level']\n",
    "train = train.drop([\"interest_level\"], axis=1)\n",
    "X_train = np.array(train)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "各类样本不均衡，交叉验证是采用StratifiedKFold，在每折采样时各类样本按比例采样"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# prepare cross validation\n",
    "kfold = StratifiedKFold(n_splits=5, shuffle=True, random_state=3)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "###### 第二轮参数调整得到的n_estimators最优值（251），其余参数继续默认值"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "用交叉验证评价模型性能时，用scoring参数定义评价指标。评价指标是越高越好，因此用一些损失函数当评价指标时，需要再加负号，如neg_log_loss，neg_mean_squared_error 详见sklearn文档：http://scikit-learn.org/stable/modules/model_evaluation.html#log-loss"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'reg_alpha': [1.5, 2], 'reg_lambda': [0.5, 1, 2]}"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#reg_alpha = [1e-3, 1e-2, 0.05, 0.1]    #default = 0\n",
    "#reg_lambda = [1e-3, 1e-2, 0.05, 0.1]   #default = 1\n",
    "\n",
    "reg_alpha = [ 1.5, 2]    #default = 0, 测试0.1,1，1.5，2\n",
    "reg_lambda = [0.5, 1, 2]      #default = 1，测试0.1， 0.5， 1，2\n",
    "\n",
    "param_test5_1 = dict(reg_alpha=reg_alpha, reg_lambda=reg_lambda)\n",
    "param_test5_1\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/wlq666888/APPs/Anaconda3-5.0.1-Linux-x86_64/Anaconda3-5.0.1/lib/python3.6/site-packages/sklearn/model_selection/_search.py:761: DeprecationWarning: The grid_scores_ attribute was deprecated in version 0.18 in favor of the more elaborate cv_results_ attribute. The grid_scores_ attribute will not be available from 0.20\n",
      "  DeprecationWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "([mean: -0.58231, std: 0.00345, params: {'reg_alpha': 1.5, 'reg_lambda': 0.5},\n",
       "  mean: -0.58219, std: 0.00350, params: {'reg_alpha': 1.5, 'reg_lambda': 1},\n",
       "  mean: -0.58245, std: 0.00335, params: {'reg_alpha': 1.5, 'reg_lambda': 2},\n",
       "  mean: -0.58277, std: 0.00375, params: {'reg_alpha': 2, 'reg_lambda': 0.5},\n",
       "  mean: -0.58248, std: 0.00337, params: {'reg_alpha': 2, 'reg_lambda': 1},\n",
       "  mean: -0.58257, std: 0.00341, params: {'reg_alpha': 2, 'reg_lambda': 2}],\n",
       " {'reg_alpha': 1.5, 'reg_lambda': 1},\n",
       " -0.58218683229121726)"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "xgb5_1 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=251,  #第二轮参数调整得到的n_estimators最优值 ###正在运行中。。。\n",
    "        max_depth=5,\n",
    "        min_child_weight=5,\n",
    "        gamma=0,\n",
    "        subsample=0.8,\n",
    "        colsample_bytree=0.9,\n",
    "        colsample_bylevel = 0.7,\n",
    "        objective= 'multi:softprob',\n",
    "        seed=3)\n",
    "\n",
    "\n",
    "gsearch5_1 = GridSearchCV(xgb5_1, param_grid = param_test5_1, scoring='neg_log_loss',n_jobs=-1, cv=kfold)\n",
    "gsearch5_1.fit(X_train , y_train)\n",
    "\n",
    "gsearch5_1.grid_scores_, gsearch5_1.best_params_,     gsearch5_1.best_score_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/wlq666888/APPs/Anaconda3-5.0.1-Linux-x86_64/Anaconda3-5.0.1/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/wlq666888/APPs/Anaconda3-5.0.1-Linux-x86_64/Anaconda3-5.0.1/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/wlq666888/APPs/Anaconda3-5.0.1-Linux-x86_64/Anaconda3-5.0.1/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/wlq666888/APPs/Anaconda3-5.0.1-Linux-x86_64/Anaconda3-5.0.1/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/wlq666888/APPs/Anaconda3-5.0.1-Linux-x86_64/Anaconda3-5.0.1/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/wlq666888/APPs/Anaconda3-5.0.1-Linux-x86_64/Anaconda3-5.0.1/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/wlq666888/APPs/Anaconda3-5.0.1-Linux-x86_64/Anaconda3-5.0.1/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "{'mean_fit_time': array([ 270.18053017,  262.3967658 ,  268.41660094,  287.79281101,\n",
       "         349.73029852,  295.99446831]),\n",
       " 'mean_score_time': array([ 1.34108734,  0.79920712,  0.8336679 ,  1.12857084,  1.33719358,\n",
       "         0.85873837]),\n",
       " 'mean_test_score': array([-0.58230833, -0.58218683, -0.58244992, -0.58277195, -0.58248015,\n",
       "        -0.58257266]),\n",
       " 'mean_train_score': array([-0.50368235, -0.50438597, -0.50605899, -0.50512897, -0.50614103,\n",
       "        -0.50747671]),\n",
       " 'param_reg_alpha': masked_array(data = [1.5 1.5 1.5 2 2 2],\n",
       "              mask = [False False False False False False],\n",
       "        fill_value = ?),\n",
       " 'param_reg_lambda': masked_array(data = [0.5 1 2 0.5 1 2],\n",
       "              mask = [False False False False False False],\n",
       "        fill_value = ?),\n",
       " 'params': [{'reg_alpha': 1.5, 'reg_lambda': 0.5},\n",
       "  {'reg_alpha': 1.5, 'reg_lambda': 1},\n",
       "  {'reg_alpha': 1.5, 'reg_lambda': 2},\n",
       "  {'reg_alpha': 2, 'reg_lambda': 0.5},\n",
       "  {'reg_alpha': 2, 'reg_lambda': 1},\n",
       "  {'reg_alpha': 2, 'reg_lambda': 2}],\n",
       " 'rank_test_score': array([2, 1, 3, 6, 4, 5], dtype=int32),\n",
       " 'split0_test_score': array([-0.57727308, -0.57652587, -0.57721442, -0.57669738, -0.57691165,\n",
       "        -0.57697046]),\n",
       " 'split0_train_score': array([-0.50487762, -0.50486489, -0.50760899, -0.50649217, -0.50708099,\n",
       "        -0.50887801]),\n",
       " 'split1_test_score': array([-0.57993077, -0.5802774 , -0.58040208, -0.58099624, -0.58086848,\n",
       "        -0.58080921]),\n",
       " 'split1_train_score': array([-0.50387038, -0.50412707, -0.50591958, -0.50539529, -0.50606746,\n",
       "        -0.50658878]),\n",
       " 'split2_test_score': array([-0.5824131 , -0.58279641, -0.58281798, -0.58313527, -0.58289458,\n",
       "        -0.58312317]),\n",
       " 'split2_train_score': array([-0.50330348, -0.50425432, -0.50542413, -0.50410554, -0.50500929,\n",
       "        -0.50656402]),\n",
       " 'split3_test_score': array([-0.58498926, -0.58493469, -0.58537939, -0.5854704 , -0.58578536,\n",
       "        -0.58619933]),\n",
       " 'split3_train_score': array([-0.50358213, -0.50454666, -0.5063594 , -0.504793  , -0.50671721,\n",
       "        -0.50829871]),\n",
       " 'split4_test_score': array([-0.58693685, -0.58640107, -0.58643693, -0.58756189, -0.58594173,\n",
       "        -0.58576209]),\n",
       " 'split4_train_score': array([-0.50277814, -0.50413694, -0.50498287, -0.50485883, -0.50583022,\n",
       "        -0.50705402]),\n",
       " 'std_fit_time': array([  1.19674989,   4.96667061,  13.83090312,   7.58154713,\n",
       "          7.73813167,  81.67616007]),\n",
       " 'std_score_time': array([ 0.39154633,  0.07741899,  0.11233024,  0.30832085,  0.20591611,\n",
       "         0.11083144]),\n",
       " 'std_test_score': array([ 0.00345327,  0.00350351,  0.00335309,  0.00375255,  0.00336702,\n",
       "         0.00340949]),\n",
       " 'std_train_score': array([ 0.00069789,  0.00028339,  0.00090258,  0.0007953 ,  0.00072088,\n",
       "         0.00094228])}"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gsearch5_1.cv_results_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best: -0.582187 using {'reg_alpha': 1.5, 'reg_lambda': 1}\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/wlq666888/APPs/Anaconda3-5.0.1-Linux-x86_64/Anaconda3-5.0.1/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/wlq666888/APPs/Anaconda3-5.0.1-Linux-x86_64/Anaconda3-5.0.1/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/wlq666888/APPs/Anaconda3-5.0.1-Linux-x86_64/Anaconda3-5.0.1/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/wlq666888/APPs/Anaconda3-5.0.1-Linux-x86_64/Anaconda3-5.0.1/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/wlq666888/APPs/Anaconda3-5.0.1-Linux-x86_64/Anaconda3-5.0.1/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/wlq666888/APPs/Anaconda3-5.0.1-Linux-x86_64/Anaconda3-5.0.1/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/wlq666888/APPs/Anaconda3-5.0.1-Linux-x86_64/Anaconda3-5.0.1/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f94a6e4c9e8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# summarize results\n",
    "print(\"Best: %f using %s\" % (gsearch5_1.best_score_, gsearch5_1.best_params_))\n",
    "test_means = gsearch5_1.cv_results_[ 'mean_test_score' ]\n",
    "test_stds = gsearch5_1.cv_results_[ 'std_test_score' ]\n",
    "train_means = gsearch5_1.cv_results_[ 'mean_train_score' ]\n",
    "train_stds = gsearch5_1.cv_results_[ 'std_train_score' ]\n",
    "\n",
    "pd.DataFrame(gsearch5_1.cv_results_).to_csv('my_preds_reg_alpha_reg_lambda_1.csv')\n",
    "\n",
    "# plot results\n",
    "test_scores = np.array(test_means).reshape(len(reg_alpha), len(reg_lambda))\n",
    "train_scores = np.array(train_means).reshape(len(reg_alpha), len(reg_lambda))\n",
    "\n",
    "#log_reg_alpha = [0,0,0,0]\n",
    "#for index in range(len(reg_alpha)):\n",
    "#   log_reg_alpha[index] = math.log10(reg_alpha[index])\n",
    "    \n",
    "for i, value in enumerate(reg_alpha):\n",
    "    pyplot.plot(reg_lambda, -test_scores[i], label= 'reg_alpha:'   + str(value))\n",
    "#for i, value in enumerate(min_child_weight):\n",
    "#    pyplot.plot(max_depth, train_scores[i], label= 'train_min_child_weight:'   + str(value))\n",
    "    \n",
    "pyplot.legend()\n",
    "pyplot.xlabel( 'reg_alpha' )                                                                                                      \n",
    "pyplot.ylabel( '-Log Loss' )\n",
    "pyplot.savefig( 'reg_alpha_vs_reg_lambda1.png' )"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "最佳的reg_alpha为1.5，reg_lambda为1，logloss为-0.582187"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'base_score': 0.5,\n",
       " 'booster': 'gbtree',\n",
       " 'colsample_bylevel': 0.7,\n",
       " 'colsample_bytree': 0.9,\n",
       " 'gamma': 0,\n",
       " 'learning_rate': 0.1,\n",
       " 'max_delta_step': 0,\n",
       " 'max_depth': 5,\n",
       " 'min_child_weight': 5,\n",
       " 'missing': None,\n",
       " 'n_estimators': 251,\n",
       " 'nthread': 1,\n",
       " 'objective': 'multi:softprob',\n",
       " 'reg_alpha': 0,\n",
       " 'reg_lambda': 1,\n",
       " 'scale_pos_weight': 1,\n",
       " 'seed': 3,\n",
       " 'silent': 1,\n",
       " 'subsample': 0.8}"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "xgb5_1.get_xgb_params()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>bathrooms</th>\n",
       "      <th>bedrooms</th>\n",
       "      <th>price</th>\n",
       "      <th>price_bathrooms</th>\n",
       "      <th>price_bedrooms</th>\n",
       "      <th>room_diff</th>\n",
       "      <th>room_num</th>\n",
       "      <th>Year</th>\n",
       "      <th>Month</th>\n",
       "      <th>Day</th>\n",
       "      <th>...</th>\n",
       "      <th>virtual</th>\n",
       "      <th>walk</th>\n",
       "      <th>walls</th>\n",
       "      <th>war</th>\n",
       "      <th>washer</th>\n",
       "      <th>water</th>\n",
       "      <th>wheelchair</th>\n",
       "      <th>wifi</th>\n",
       "      <th>windows</th>\n",
       "      <th>work</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>2950</td>\n",
       "      <td>1475.000000</td>\n",
       "      <td>1475.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>11</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1.0</td>\n",
       "      <td>2</td>\n",
       "      <td>2850</td>\n",
       "      <td>1425.000000</td>\n",
       "      <td>950.000000</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>24</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>3758</td>\n",
       "      <td>1879.000000</td>\n",
       "      <td>1879.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>3</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1.0</td>\n",
       "      <td>2</td>\n",
       "      <td>3300</td>\n",
       "      <td>1650.000000</td>\n",
       "      <td>1100.000000</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>11</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2.0</td>\n",
       "      <td>2</td>\n",
       "      <td>4900</td>\n",
       "      <td>1633.333333</td>\n",
       "      <td>1633.333333</td>\n",
       "      <td>0.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>12</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 227 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   bathrooms  bedrooms  price  price_bathrooms  price_bedrooms  room_diff  \\\n",
       "0        1.0         1   2950      1475.000000     1475.000000        0.0   \n",
       "1        1.0         2   2850      1425.000000      950.000000       -1.0   \n",
       "2        1.0         1   3758      1879.000000     1879.000000        0.0   \n",
       "3        1.0         2   3300      1650.000000     1100.000000       -1.0   \n",
       "4        2.0         2   4900      1633.333333     1633.333333        0.0   \n",
       "\n",
       "   room_num  Year  Month  Day  ...   virtual  walk  walls  war  washer  water  \\\n",
       "0       2.0  2016      6   11  ...         0     0      0    0       0      0   \n",
       "1       3.0  2016      6   24  ...         0     0      0    1       0      0   \n",
       "2       2.0  2016      6    3  ...         0     0      0    0       0      0   \n",
       "3       3.0  2016      6   11  ...         0     0      0    0       0      0   \n",
       "4       4.0  2016      4   12  ...         0     0      0    1       0      0   \n",
       "\n",
       "   wheelchair  wifi  windows  work  \n",
       "0           0     0        0     0  \n",
       "1           0     0        0     0  \n",
       "2           0     0        0     0  \n",
       "3           1     0        0     0  \n",
       "4           0     0        0     0  \n",
       "\n",
       "[5 rows x 227 columns]"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test = pd.read_csv(\"RentListingInquries_FE_test.csv\")\n",
    "test.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "XGBClassifier(base_score=0.5, booster='gbtree', colsample_bylevel=0.7,\n",
       "       colsample_bytree=0.9, gamma=0, learning_rate=0.1, max_delta_step=0,\n",
       "       max_depth=5, min_child_weight=5, missing=None, n_estimators=251,\n",
       "       n_jobs=1, nthread=None, objective='multi:softprob', random_state=0,\n",
       "       reg_alpha=0, reg_lambda=1, scale_pos_weight=1, seed=3, silent=True,\n",
       "       subsample=0.8)"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "xgb5_1.fit(X_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
